package com.cyzy.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Component
public class FaceMatchUtil {
    //百度人脸对比

    @Value("${baidu.api.face-match-url}")
    private  String faceMatchUrl;
    @Value("${baidu.api.access-token}")
    private  String accessToken;
    public  String faceMatch(String image1Path, String image2Path) {
        // 请求url
        String url = faceMatchUrl;
        try {
            // 构造请求参数
            List<Map<String, String>> images = new ArrayList<>();

            // 添加第一张图片
            Map<String, String> image1Map = new HashMap<>();
            image1Map.put("image", imgToBase64(image1Path));
            image1Map.put("image_type", "BASE64");
            images.add(image1Map);

            // 添加第二张图片
            Map<String, String> image2Map = new HashMap<>();
            image2Map.put("image", imgToBase64(image2Path));
            image2Map.put("image_type", "BASE64");
            images.add(image2Map);

            String param = GsonUtils.toJson(images);

            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
//            String accessToken = "24.a64f32a216771818a2473615fc74bc0e.2592000.1759300400.282335-119906523";

            String result = HttpUtil.post(url, accessToken, "application/json", param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将图片文件转换为Base64编码
     * @param imgPath 图片路径
     * @return Base64编码字符串
     */
    private static String imgToBase64(String imgPath) {
        if (imgPath == null) {
            return null;
        }

        try (FileInputStream imageInFile = new FileInputStream(imgPath)) {
            // 读取图片字节数组
            byte[] imageData = new byte[imageInFile.available()];
            imageInFile.read(imageData);

            // 使用我们已有的Base64工具类进行编码
            return Base64Util.encode(imageData);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    //添加人脸
    public String add(String imgPath, String groupId, String userId) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("image", imgToBase64(imgPath));
            map.put("group_id", groupId);
            map.put("user_id", userId);
            map.put("image_type", "BASE64");


            String param = GsonUtils.toJson(map);

            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
//            String accessToken = "[调用鉴权接口获取的token]";

            String result = HttpUtil.post(url, accessToken, "application/json", param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    //1:n人脸查询
    public String faceSearch(String imgPath, String groupId, String userId) {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/face/v3/search";
        try {
            Map<String, Object> map = new HashMap<>();
            map.put("image", imgToBase64(imgPath));
            map.put("group_id_list", groupId);
            map.put("user_id", userId);
            map.put("image_type", "BASE64");
            String param = GsonUtils.toJson(map);

            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。

            String result = HttpUtil.post(url, accessToken, "application/json", param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
